<?php
	/**
	 * @author NHN (developers@xpressengine.com)
	 * @package /classes/db/queryparts/condition
	 * @version 0.1
	 */
	class ConditionWithArgument extends Condition {

		/**
		 * constructor
		 * @param string $column_name
		 * @param mixed $argument
		 * @param string $operation
		 * @param string $pipe
		 * @return void
		 */
            function ConditionWithArgument($column_name, $argument, $operation, $pipe = ""){
                    if($argument === null) { $this->_show = false; return; }
                        parent::Condition($column_name, $argument, $operation, $pipe);
			$this->_value = $argument->getValue();
		}

		function getArgument(){
                    if(!$this->show()) return;
                    return $this->argument;
		}

		/**
		 * change string without value
		 * @return string
		 */
		function toStringWithoutValue(){
			$value = $this->argument->getUnescapedValue();

			if(is_array($value)){
				$q = '';
				foreach ($value as $v) $q .= '?,';
				if($q !== '') $q = substr($q, 0, -1);
				$q = '(' . $q . ')';
			}
			else 
			{
				// Prepared statements: column names should not be sent as query arguments, but instead concatenated to query string
				if($this->argument->isColumnName())
				{
					$q = $value;
				}
				else
				{
					$q = '?';
				}
			}
			return $this->pipe . ' ' . $this->getConditionPart($q);
		}

		/**
		 * @return boolean
		 */
		function show(){
                    if(!isset($this->_show)){
                        if(!$this->argument->isValid()) $this->_show = false;
                        if($this->_value === '\'\'') $this->_show = false;
                        if(!isset($this->_show)){
                            return parent::show();
                        }
                    }
                    return $this->_show;
		}
	}

?>
